package day03;
// 运算符的演示
public class OperDemo {
    public static void main(String[] args) {
        /*
          1、算术运算符 + - * / ++ --
            1） % : 取模 / 取余 ；
            2) ++ / -- ： 自增1 // 自减1 。可在变量前也可以在变量后
              2、1）单独使用时 在前后都一样
                 2）被使用时 在前后不一样
                    a++ 值为 a
                    ++a 值为 a + 1
         */
        System.out.println( 5%2 );
        System.out.println( 6%3 );
        // 单独使用
        int a = 5 , b = 5 ;
        a++ ; // 相当于 a = a + 1
        ++b ; // 相当于 b = b + 1
        System.out.println( a ); // 6
        System.out.println( b ); // 6

        // 被使用
        int a1 = 5 , b1 = 5;
        int c = a1++ ; // 1、记录 a++ 的值为 a   2、a 自增1 变为 6  3、将记录a++的值 5 赋给 c
                       // 简便方法 a++ 的值 是 5  所以c是 5
        int d = ++b1 ; // 1、 记录 ++b1 的值 6  2、b 自增 1 变为 6  3、将记录++b的值 赋给 d
                       // 简便方法 ++b 的 值 是 6  所以d 赋值为 6
        System.out.println( a1 ); // 6
        System.out.println( b1 ); // 6
        System.out.println( c ); // 5
        System.out.println( d ); // 6

        int a2 = 5 , b2 = 5;
        int c1 = a2++ ;
        int d1 = ++b2 ;
        System.out.println( a2 );
        System.out.println( b2 );
        System.out.println( c1 );
        System.out.println( d1 );

        int a3 = 10 , b3 = 20;
        int c2 = ++a3 ;
        int d2 = b3++ ;
        System.out.println( a3 );
        System.out.println( b3 );
        System.out.println( c2 );
        System.out.println( d2 );

        int a4 = 100 , b4 = 500 ;
        ++a4 ; b4++ ;
        System.out.println( a4 );
        System.out.println( b4 );

        int c3 = 800 , d3 = 1000 ;
        ++c3 ; d3++ ;
        System.out.println( c3 );
        System.out.println( d3 );

        int c4 = 10000 , d4 = 80000 ;
        c4++ ; ++d4 ;
        System.out.println( c4 );
        System.out.println( d4 );

        // a-- =  a
        // --a =  a - 1
        // 单独使用
        int a5 = 5 , b5 = 5 ;
        a5--; // 相当于 a5 - 1
        --b5; // 相当于 b5 - 1
        System.out.println( a5 ); // 4
        System.out.println( b5 ); // 4

        // 被使用
        int a6 = 5 , b6 = 5 ;
        int c5 = a6-- ;
        int d5 = --b6 ;
        System.out.println( a6 ); // 4
        System.out.println( b6 ); // 4
        System.out.println( c5 ); // 5
        System.out.println( d5 ); // 4

        int a7 = 8 , b7 = 10 ;
        int c6 = --a7 ;
        int d6 = b7-- ;
        System.out.println( a7 );
        System.out.println( b7 );
        System.out.println( c6 );
        System.out.println( d6 );

        int c7 = 10 , d7 = 50 ;
        c7-- ; --d7 ;
        System.out.println( c7 );
        System.out.println( d7 );

        // 2、 关系运算符
        // > 大于  < 小于  >= 大于或等于  <= 小于或等于  == 等于  != 不等于
        // 关系运算的结算为boolean 型 关系成立就是 true 不成立就是 false
        int q = 5 , w = 10 , e = 5 ;
        boolean r = q>w ;
        System.out.println( r ); //  false
        System.out.println( e<w ); // true
        System.out.println( q>=e ); // true
        System.out.println( q<=w ); // true
        System.out.println( q==e ); // true
        System.out.println( q!=e ); // false
        System.out.println( q+e>w ); // false
        System.out.println( q%2==0 ); // false
        System.out.println( e++>5 ); // false
        System.out.println( ++e>5 ); // true
        System.out.println( e++>5 ); // true

        int q1 = 8 , w1 = 9 , e1 = 10 ;
        boolean r1 = ++q1 >= w1 ;
        System.out.println( r1 ); // true q1 = 9
        System.out.println( q1>=w1 ); // true
        System.out.println( q1++>=e1 ); // false q1= 10
        System.out.println( ++w1<=e1 ); // true w1 = 10
        System.out.println( q1>=w1 ); // true
        System.out.println( ++q1>=w1++ ); // ture q1 = 11 w1 = 11
        System.out.println( q1>=w1 ); //true
        System.out.println( w1<e1 ); // false
        System.out.println( q1!=w1 ); // false
        System.out.println( q1==w1 ); // true

        /* 3、逻辑运算符
              1、&& 逻辑与(表达并且)  两边为 true 就为 true 一边有 false 就是 false
                 || 逻辑或(表达或者) 两边任意为 true 就为 true 两边都是 false 就是 false
                 ！ 逻辑非(表达取反) 非真则假 非假则真 .
             2、逻辑运算是建立在关系运算之上的 所以逻辑运算的结果也是 用 boolean
        */
        int q2 = 8 , w2 = 9 , e2 = 10 ;
        boolean r2 = ++q2 <= w2 ; // q2 = 9
        System.out.println( r2 ); // true
        System.out.println( q2>=w2 && q2<=w2 ); // true
        System.out.println( q2>=w2 && q2!=w2 ); // false
        System.out.println( q2>=e2 || q2<=e2 ); // true
        System.out.println( q2>=e2 || q2!=w2 ); //false
        r2 = ++q2 >= e2 ; // q2 = 10  true
        boolean r3 = w2 >= e2 ;  // false
        System.out.println( !r3 ); // ture
        System.out.println( !r2 ); // false

        int q3 = 10 , w3 = 11 , e3 = 12 ;
        boolean r4 = q3++ <= w3 ; // q3 = 11
        System.out.println( r4 ); // true
        System.out.println( q3>=w3 && q3<=w3 ); // true
        System.out.println( q3>=w3 && q3!=w3 ); // false
        System.out.println( q3>=e3 || q3<=e3 ); // true
        System.out.println( q3>=e3 || q3!=w3 ); // false
        r4 = ++q3 >= e3 ; // q3 = 12 true
        boolean r5 = w3 >= e3 ; // false
        System.out.println( !r5 ); // true
        System.out.println( !r4 ); // false
        System.out.println( !(q3<=w3) ); // ture
        System.out.println( !(q3>=e3) ); // false

        /*
         * 短路与 && 当前面的结果为 false 时 发生短路 不运行后面的操作
         * 短路或 || 当前面的结果为 true 时 发生短路 不运行后面的操作
        */
        int aa = 5 , bb = 10 , cc = 5 ;
        boolean dd = aa>bb && cc++>2 ;
        System.out.println( dd ); // false
        System.out.println( cc ); // 5
        dd = aa<bb && cc++>2 ;
        System.out.println( dd ); // true
        System.out.println( cc ); // 6
        dd = aa>bb || cc++<2 ;
        System.out.println( dd ); // false
        System.out.println( cc ); // 7
        dd = aa<bb || cc++<2 ;
        System.out.println( dd ); // ture
        System.out.println( cc ); // 7

        int aa1 = 7 , bb1 = 8 , cc1 = 9 ;
        boolean dd1 = aa1>bb1 && cc1++>2 ;
        System.out.println( dd1 ); // false
        System.out.println( cc1 ); // 9
        dd1 = aa1<bb1 && cc1++>2 ; // cc1 = 10
        System.out.println( dd1 ); // true
        System.out.println( cc1 ); // 10
        dd1 = aa1>bb1 || cc++>2 ;
        System.out.println( dd1 ); // true
        System.out.println( cc1 ); // 10
        dd1 = aa1>bb1 || cc1++<2 ;
        System.out.println( dd1 ); // false
        System.out.println( cc1 ); // 11

        /*
          4、 赋值运算符；
            1、简单赋值运算符 =
            2、扩展赋值运算符 += -= *= 、= %=  ( 自带强转功能 ）
         */
        int aa2 = 5 ;
        aa2 += 10; // 相当于 a = a + 10
        System.out.println( aa2 ); // 15
        aa2 *= 2 ; // 相当于 a = a * 2
        System.out.println( aa2 ); // 30
        aa2 /= 6 ; // 相当于 a = a / 6
        System.out.println( aa2 ); // 5
        aa2 %= 3 ; // 相当于 a = a % 3
        System.out.println( aa2 ); // 2
        aa2 -= 2 ; // 相当于 a = a - 2
        System.out.println( aa2 ); // 0

        int op = 10 ;
        op += 10 ;
        System.out.println( op ); // 20
        op -= 10 ;
        System.out.println( op ); // 10
        op *= 4 ;
        System.out.println( op ); // 40
        op /= 2 ;
        System.out.println( op ); // 20
        op %= 2 ;
        System.out.println( op ); // 0

        int op1 = 1 ;
        op1 += 1 ;
        System.out.println( op1 ); // 2
        op1 -= 1 ;
        System.out.println( op1 ); // 1
        op1 *= 1 ;
        System.out.println( op1 ); // 1
        op1 /= 1 ;
        System.out.println( op1 ); // 1
        op1 %= 1 ;
        System.out.println( op1 ); // 0

        /*
          5、字符串连接运算符
            1、+
              1. 若两边为数字 则做加法运算
              2. 若两便出现了字符串，则做字符串连接
              3、任何类型的数据与字符串相连 结果一定是字符串类型
         */
        String op2 = "快乐的池塘";
        String op3 = "有只小青蛙";
        System.out.println( op2 + op3 ); // 快乐的池塘里面有只小青蛙
        int opp = 1 ;
        int oppp = 1 ;
        System.out.println( opp + oppp ); // 2
        int age = 38 ;
        System.out.println( "age = " ); // 显示 age =
        System.out.println( age ); // 显示 38
        System.out.println( "age = " + age ); // 显示 age = 38

        String po = "嗨嗨嗨,";
        String pp = "现在是同一个时间,";
        String ppp = "但是不是同一个撤硕";
        System.out.println( po + pp + ppp );

        int abc = 300 ;
        String cba = "我兜里现在只有";
        String bca = "块钱";
        System.out.println( cba + abc + bca );

        System.out.println( "我兜里现在没有" + abc + "块钱" );
        System.out.println( "现在是北京时间的" + 15 + "点整" );
        System.out.println( "嗨嗨嗨," + "嗨嗨嗨" );

        System.out.println( 10 + 20 + "" + 30 ); // 3030
        System.out.println( "" + 10 + 20 + 30 ); // 102030
        System.out.println( 10 + 20 + 30 + "" ); // 60

        System.out.println( 10 + 20 + 30 + 40 + 50 + 60 + "" ); // 210
        System.out.println( "" + 10 + 20 + 30 + 40 + 50 + 60 ); // 102030405060
        System.out.println( 10 + 20 + 30 + "" + 40 + 50 + 60 ); // 060405060

        System.out.println( "a" + "b" + "c" + (int)'d' );
        System.out.println( "6" + "6" + "6" + (int)'B' );

        /*
          6、条件运算符 / 三目运算符
            1、语法 boolean ?  数1 数2
            2、执行过程 ： 整个条件运算是有值得，他的值要么是？号 要么是 数1 要么说是：号后的数字2
              判断 boolean 的 值
              若为 true 则整个表达式的结果为 ？ 后的数 1
              若为 false 则整个表达式的结果为 : 后的数 2
         */
        int num = 5 ;
        int flag = num > 0 ? 1 : -1 ;
        System.out.println( flag );

        int ap = 8 , bp = 5 ;
        int max = ap > bp ? ap : bp ;
        System.out.println( "max = " + max );

        int n = 1 , m = 2 ;
        int big = n > m ? n : m ;
        System.out.println( "big = " + big );

        int k = 10 , j = 15 ;
        int h = k > j ? k : j ;
        System.out.println( "h = " + h );


    }
}
